package com.ccb.jyzx.expand.tiantouonline.utils;

import com.ccb.jyzx.expand.tiantouonline.bean.Classify;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 标签工具类
 * 报告文件名称：文件ID.HTML/文件ID.docx(HTML格式的文件名称与对应的word格式报告文件名称保持一致)
 * 文件ID：频度+报告时间（YYYYMMDD）+文件序号+批次序号
 *
 * 标签文件为非定长文本文件，每条记录占一行，字段分割使用“|@|”
 * 分隔（标签代码用英文逗号分隔），数据结构如下：
 * 文件id|@|资讯名称|@|YYYYMMDD|@|报告类型|@|年度|@|季度|@|月度|@|周|@|标签|@|一级栏目|@|二级栏目|@|三级栏目|@|
 * @ProjectName: extend
 * @Author: jianghaolin
 * @Version: 1.0
 */
public class ClassifyUtils {

    static Logger logger= LoggerFactory.getLogger(ClassifyUtils.class);

    //分隔符
    private static String base = "|@|";

    private static Integer report = 2;

    /**
     * 根据fileId和classify获取tag内容
     * @param fileId
     * @param classify
     * @return
     */
    public static String getTagForFileId(String fileId,Classify classify){
        //资讯名称
        String infoName = getLab(classify.getInfoName());
        //报告时间
        String reportTime = getLab(classify.getReportTime());
        //报告类型
        String baseReportType = getLab(classify.getReportType());
        String reportType = baseReportType;
        if(baseReportType != null && baseReportType.length() == report){
            reportType = baseReportType.replace("0","");
        }
        //年度
        String year = getLab(classify.getYear());
        //季度
        String quarter = getLab(classify.getQuarter());
        //月度
        String monthly = getLab(classify.getMonthly());
        //周
        String week = getLab(classify.getWeek());
        //标签
        String tag = getLab(classify.getTag());
        //一级栏目
        String firstColumn = getLab(classify.getFirstColumn());
        //二级栏目
        String secondColumn = getLab(classify.getSecondColumn());
        //三级栏目
        String thirdColumn = getLab(classify.getThirdColumn());
        logger.info("一级栏目：" + firstColumn);
        logger.info("二级栏目：" + secondColumn);
        logger.info("三级栏目：" + thirdColumn);
        //如果二级不为空，但是一级为空
        if(!StringUtils.isEmpty(secondColumn) && StringUtils.isEmpty(firstColumn)){
            return null;
        }
        //如果三级不为空，但是一级或者二级为空
        if(!StringUtils.isEmpty(thirdColumn) && (StringUtils.isEmpty(secondColumn) || StringUtils.isEmpty(firstColumn))){
            return null;
        }
        String result = fileId + base + infoName + base + reportTime + base + reportType + base + year + base +
                quarter + base + monthly + base + week + base + tag + base + firstColumn + base + secondColumn + base + thirdColumn + base;
        return result;
    }

    /**
     * 获取标签名称
     * 1、获取文件ID
     * 2、获取剩下的内容，拼接
     * @param classify
     * @return
     */
    public static String getTag(Classify classify){
        if(classify == null){
            return null;
        }
        //文件ID
        String fileId = getFileId(classify);
        logger.info("获取标签名时候的文件ID（文件名称）为：" + fileId);
        String result = getTagForFileId(fileId,classify);
        return result;
    }

    /**
     * 获取文件ID
     * @param classify
     * @return
     */
    public static String getFileId(Classify classify){
        if(classify == null){
            return null;
        }
        //频度
        String baseFrequentness = classify.getFrequentness();
        String frequentness = baseFrequentness;
        if(baseFrequentness != null && baseFrequentness.length() == 1){
            frequentness = "0" + baseFrequentness;
        }
        //报告时间
        String reportTime = classify.getReportTime();
        //文件序号
        String fileSeq = classify.getFileSeq();
        //批次序号
        String batchSeq = classify.getBatchSeq();

        if(frequentness == null ||
                reportTime == null ||
                fileSeq == null ||
                batchSeq == null){
            return null;
        }
        String fileId = frequentness + reportTime + fileSeq + batchSeq;
        return fileId;
    }

    /**
     * 如果为空则为"",否则为本身
     * @return
     */
    private static String getLab(String arg){
        return arg == null ? "" : arg;
    }
}
